package v1

import (
	"itam/internal/model"

	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gtime"
)

// create
type VmCreateReq struct {
	g.Meta         `path:"/vm" tags:"虚拟机" method:"post" summary:"新增虚拟机"`
	Name           string      `v:"required" json:"name"`
	OsType         string      `v:"required" json:"osType"`
	Owner          string      `v:"required" json:"owner"`
	Vcpu           int         `v:"required" json:"vcpu"`
	Memory         int         `v:"required" json:"memory"`
	Disk           int         `v:"required" json:"disk"`
	IpAddress      string      `v:"required" json:"ipAddress"`
	PmId           int         `v:"required" json:"pmId"`
	EnvId          int         `v:"required" json:"envId"`
	MachineUsage   string      `json:"machineUsage"`
	RecomandStatus string      `v:"required" json:"recomandStatus"`
	ExpiredDate    *gtime.Time `v:"date" json:"expiredDate"`
}
type VmCreateRes struct {
	Id int
}

// update
type VmUpdateReq struct {
	g.Meta         `path:"/vm" tags:"虚拟机" method:"put" summary:"更新虚拟机"`
	Id             int         `v:"required" json:"id"`
	OsType         string      `v:"required" json:"osType"`
	Owner          string      `v:"required" json:"owner"`
	Vcpu           int         `v:"required" json:"vcpu"`
	Memory         int         `v:"required" json:"memory"`
	Disk           int         `v:"required" json:"disk"`
	IpAddress      string      `v:"required" json:"ipAddress"`
	PmId           int         `v:"required" json:"pmId"`
	EnvId          int         `v:"required" json:"envId"`
	MachineUsage   string      `json:"machineUsage"`
	RecomandStatus string      `v:"required" json:"recomandStatus"`
	ExpiredDate    *gtime.Time `v:"date" json:"expiredDate"`
}
type VmUpdateRes struct{}

// delete
type VmDeleteReq struct {
	g.Meta `path:"/vm/{Id}" tags:"虚拟机" method:"delete" summary:"删除虚拟机"`
	Id     int `in:"path" json:"id" v:"min:1#请选择需要删除的虚拟机" dc:"虚拟机id"`
}
type VmDeleteRes struct{}

// getlist
type VmGetListReq struct {
	g.Meta         `path:"/vm" tags:"虚拟机" method:"get" summary:"虚拟机列表"`
	Name           string `json:"name"           description:"名称"`
	OsType         string `json:"osType" description:"操作系统"`
	Owner          string `json:"owner"          description:"负责人"`
	IpAddress      string `json:"ipAddress"      description:"ip地址"`
	PmId           int    `json:"pmId"           description:"物理机id"`
	EnvId          int    `json:"envId"          description:"环境id"`
	RecomandStatus string `json:"recomandStatus" description:"期望状态"`
	Page           int    `json:"page" in:"query" d:"1"  v:"min:0#分页号码错误"     dc:"分页号码，默认1"`
	Size           int    `json:"size" in:"query" d:"10" v:"max:50#分页数量最大50条" dc:"分页数量，最大50"`
}
type VmGetListRes struct {
	List  []model.VmListItem `json:"list" description:"列表"`
	Page  int                `json:"page" description:"分页码"`
	Size  int                `json:"size" description:"分页数量"`
	Total int                `json:"total" description:"数据总数"`
}

//type VmGetListOutputItem struct {
//	Vm  *VmListItem    `json:"vm"`
//	Pm  *VmListPmItem  `json:"pm"`
//	Env *VmListEnvItem `json:"env"`
//}
//
//type VmListItem struct {
//	Id             int    `json:"id"             description:""`
//	Name           string `json:"name"           description:"名称"`
//	Owner          string `json:"owner"          description:"负责人"`
//	Vcpu           int    `json:"vcpu"           description:"vcpu数"`
//	Memory         int    `json:"memory"         description:"内存"`
//	Disk           int    `json:"disk"           description:"磁盘g"`
//	IpAddress      string `json:"ipAddress"      description:"ip地址"`
//	PmId           int    `json:"pmId"           description:"物理机id"`
//	EnvId          int    `json:"envId"          description:"环境id"`
//	MachineUsage   string `json:"machineUsage"   description:"用途"`
//	RecomandStatus string `json:"recomandStatus" description:"期望状态"`
//}
//
//type VmListPmItem struct {
//	Id   int    `json:"id"             description:""`
//	Name string `json:"name"           description:"名称"`
//}
//
//type VmListEnvItem struct {
//	Id   int    `json:"id"   description:""`
//	Name string `json:"name" description:"环境名称"`
//}
